#include <stdio.h>  // 输入输出
#include <stdlib.h> // 随机函数等
#include <time.h>   //随机函数种子-时间
// 剪刀
#define SCISSORS 1
// 石头
#define ROCK 2
// 布
#define CLOTH 3
// 默认的手势数量
#define DEFAULT_GESTURE_SIZE 3

int main()
{
    // 用户手势参数
    int playerParameters[DEFAULT_GESTURE_SIZE];
    // 电脑手势
    int computerGesture;
    // 玩家手势
    int playerGesture;
    // 随机参数
    int randomParameter;
    // 当前使用用户手势参数的轮转数
    int currentPlayerParameterIndex = 0;
    // 初始化随机生成器
    srand(time(NULL));
    // 输入用户手势参数
    printf("请输入您的手势(剪刀(1), 石头(2), 布(3)):\n");
    for (int i = 0; i < DEFAULT_GESTURE_SIZE; i++)
    {
        printf("请输入第%d个手势:", i + 1);
        scanf("%d", &playerParameters[i]);
    }
    printf("电脑准备就绪!\n");
    while (1)
    {
        printf("玩家出手(剪刀(1), 石头(2), 布(3)：");
        scanf("%d", &playerGesture);

        printf("电脑出手：");
        // 生成随机参数
        randomParameter = rand() % 10 + 1;
        // 电脑出手 随机参数小于等于4 随机出手
        if (randomParameter <= 4)
        {
            computerGesture = rand() % DEFAULT_GESTURE_SIZE + 1;
        }
        else
        { // 否则出当前用户手势参数
            computerGesture = playerParameters[currentPlayerParameterIndex];
            currentPlayerParameterIndex++;
            currentPlayerParameterIndex %= DEFAULT_GESTURE_SIZE;
        }
        switch (computerGesture)
        {
        case SCISSORS:
            printf("剪刀\n");
            break;
        case ROCK:
            printf("石头\n");
            break;
        case CLOTH:
            printf("布\n");
            break;
        default:
            printf("异常：电脑出错了！\n");
            break;
        }
        // 判定 电脑与玩家出手相同
        if (playerGesture == computerGesture)
        {
            printf("平局！\n");
        } // 玩家出剪刀
        else if (playerGesture == SCISSORS)
        {
            switch (computerGesture)
            {
            case ROCK:
                printf("电脑赢了！\n");
                break;
            case CLOTH:
                printf("玩家赢了！\n");
                break;
            }
        } // 玩家出石头
        else if (playerGesture == ROCK)
        {
            switch (computerGesture)
            {
            case SCISSORS:
                printf("玩家赢了！\n");
                break;
            case CLOTH:
                printf("电脑赢了！\n");
                break;
            }
        } // 玩家出布
        else
        {
            switch (computerGesture)
            {
            case SCISSORS:
                printf("电脑赢了！\n");
                break;
            case ROCK:
                printf("玩家赢了！\n");
                break;
            }
        }
    }
    return 0;
}